/**
 * 自定义菜单栏 参考 http://logic-flow.org/guide/extension/component-menu.html
 */
const menu = {
  $_render () {
    // 自定义常规右键菜单
    this.lf.extension.menu.setMenuConfig({
      // 节点右键菜单
      nodeMenu: [
        {
          text: '删除',
          callback: (node) => {
            this.lf.deleteNode(node.id)
          }
        },
        {
          text: '编辑节点属性',
          callback: (node) => {
            this.lf.graphModel.eventCenter.emit('node:edit', node)
          }
        }
      ],
      // 边右键菜单
      edgeMenu: [
        {
          text: '删除',
          callback: (edge) => {
            this.lf.deleteEdge(edge.id)
          }
        }
      ]
    })
    // 自定义选区右键菜单
    this.lf.extension.menu.setMenuByType({
      type: 'lf:defaultSelectionMenu',
      menu: [
        {
          text:'删除',
          callback: (select) => {
            select.nodes.map((item) => {this.lf.deleteNode(item.id)})
            select.edges.map((item) => {this.lf.deleteEdge(item.id)})
          }
        },
        {
          text:'分组',
          callback: this.createSub
        }
      ]
    })
    // 自定义子系统右键菜单
    this.lf.extension.menu.setMenuByType({
      type: 'sub-system',
      menu: [
        {
          text:'删除子系统',
          callback: (node) => {
            this.lf.deleteNode(node.id)
          }
        },
        {
          text:'解除子系统',
          callback: (node) => {
            let sub = this.lf.getNodeModelById(node.id)
            let { nodes } = this.lf.getGraphRawData()
            nodes.some((itm) => {
              if (itm.type === 'sub-system' && itm.children.indexOf(node.id) !== -1) {
                let parent = this.lf.getNodeModelById(itm.id)
                node.children.forEach((child) => { parent.addChild(child) })
                return true
              } else {
                return false
              }
            })
            node.children.forEach((child) => { sub.removeChild(child) })
            this.lf.deleteNode(node.id)
          }
        }
      ]
    })
    // 自定义侧边栏 参考 http://logic-flow.org/guide/extension/component-dnd-panel.html
    this.lf.extension.dndPanel.setPatternItems([
      {
        label: '选区',
        icon: '',
        callback: () => {
          this.lf.extension.selectionSelect.openSelectionSelect()
          this.lf.once('selection:selected', () => {
            this.lf.extension.selectionSelect.closeSelectionSelect()
          })
        }
      },
      {
        label: '分组',
        icon: '',
        callback: this.createSub
      }
    ])
    this.lf.render({})
    this.$_LfEvent()
  }
}

/**
 * 按钮组自定义，设置是否提供该功能的按钮
 */
const controlConfig = {
  // 放大
  zoomIn: true,  // option value: true | false

  // 缩小
  zoomOut: true,  // option value: true | false

  // 大小适应
  zoomReset: true,  // option value: true | false

  // 定位还原
  translateRest: true,  // option value: true | false

  // 还原(大小&定位)
  reset: true,  // option value: true | false

  // 撤销
  undo: true,  // option value: true | false

  // 重做
  redo: true,  // option value: true | false

  // 清空
  clear: true,  // option value: true | false

  // 重绘
  reDraw: true,  // option value: true | false

  // 导出流图
  exportData: true,  // option value: true | false

  // 载入流图
  importData: true,  // option value: true | false

  // 载入FMECA
  importFMECA: true,  // option value: true | false

  // 流图评价 ※需要与后台交互
  check: true,  // option value: true | false

  // 测点优化
  optimizeCkpt: true,

  // 故障分析 ※需要与后台交互
  analyse: true  // option value: true | false
}

export { menu, controlConfig }